package com.newsmanagement.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.newsmanagement.domain.dto.NodeInfoPageDto;
import com.newsmanagement.domain.pojo.NodeInfo;
import com.newsmanagement.domain.pojo.PageBean;
import com.newsmanagement.domain.vo.NodeProvVo;
import com.newsmanagement.domain.vo.NodeTypeNameVo;

import java.util.List;
import java.util.Map;

/**
 * @author adim
 * @description 针对表【node_info(节点企业信息表)】的数据库操作Service
 * @createDate 2025-10-09 13:57:08
 */
public interface NodeInfoService extends IService<NodeInfo> {

    /**
     * 节点企业登录
     *
     * @param nodeInfo
     * @return
     */
    String nodeLogin(NodeInfo nodeInfo);

    /**
     * 分页查询节点信息
     *
     * @param nodeInfoPageDto
     * @return
     */
    PageBean<NodeInfo> pageNodeInfo(NodeInfoPageDto nodeInfoPageDto);

    boolean add(NodeInfo nodeInfo);

    /**
     * 获取节点信息
     *
     * @param username
     * @return
     */
    NodeInfo getNodeInfo(String username);

    /**
     * 修改节点信息
     *
     * @param nodeInfo
     * @return
     */
    boolean updateNodeInfo(NodeInfo nodeInfo);

    /**
     * 删除节点信息
     *
     * @param id
     * @return
     */
    Boolean removeNodeInfoById(Integer id);

    /**
     * 获取节点信息增长趋势
     *
     * @return
     */
    Map<String, Object> getNodeTrend();

    /**
     * 获取节点省份信息
     *
     * @return
     */
    List<NodeProvVo> getNodeProv();

    /**
     * 获取节点类型信息
     *
     * @return
     */
    List<NodeTypeNameVo> getNodeType();

    /**
     * 获取所有省份信息（去重）
     *
     * @param
     * @return List<NodeInfo>
     */
    List<NodeInfo> getProvinces();

    /**
     * 根据省份ID获取城市信息（去重）
     *
     * @param provId
     * @return List<NodeInfo>
     */
    List<NodeInfo> getCitiesByProvId(Integer provId);

    /**
     * 新增方法：根据地区获取屠宰企业（type=2）
     *
     * @param provId
     * @param cityId
     * @return List<NodeInfo>
     */
    List<NodeInfo> getSlaughterByArea(Integer provId, Integer cityId);

    // 新增方法：检查登录账号是否存在
    boolean checkLoginCodeExists(String loginCode);

    // 新增方法：根据企业类型统计数量
    Long countByType(Integer type);

    // 新增方法：根据省份统计数量
    Long countByProvince(String province);
}